package com.higgins.lawapp.server.dataItemModel;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;

import com.google.appengine.api.datastore.Key;
import com.higgins.lawapp.client.settings.dataItemModel.DataItemDTO;
import com.higgins.lawapp.client.settings.dataItemModel.DataItemInstanceDTO;
import com.higgins.lawapp.client.settings.dataItemModel.DataItemLevelDTO;

@PersistenceCapable
public class DataItemLevel {
	@SuppressWarnings("unused")
	@PrimaryKey
	@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
	private Key key;
	
	@Persistent
	private String dataItemLevelName;
	
	@Persistent
	private List<DataItemInstance> dataItemInstances;
		
	public void setDataItemLevelName(String dataItemLevelName)	{
		this.dataItemLevelName = dataItemLevelName;
	}
	public String getDataItemLevelName()	{
		return dataItemLevelName;
	}
	public List<DataItemInstance> getDataItemInstances()	{
		return dataItemInstances;
	}
	public void setDataItemInstances(List<DataItemInstance> dataItemInstances)	{
		this.dataItemInstances = dataItemInstances;
	}
	public void addDataItemInstance(DataItemInstance dataItemInstance)	{
		if (this.dataItemInstances==null)
			dataItemInstances = new ArrayList<DataItemInstance>();
		dataItemInstances.add(dataItemInstance);
			
	}
	public List<DataItemInstanceDTO> getDataItemInstanceDTOs()	{
		List<DataItemInstanceDTO> dataInstanceListDTOs = new ArrayList<DataItemInstanceDTO>();
		
		Iterator<DataItemInstance> iterator = dataItemInstances.iterator();
		while (iterator.hasNext())	{
			DataItemInstance dataItemInstance = iterator.next();
			DataItemInstanceDTO dataItemInstanceDTO = dataItemInstance.getDataItemInstanceDTO();
			dataInstanceListDTOs.add(dataItemInstanceDTO);
		}
		return dataInstanceListDTOs;
	}
	
	public void setDataItemLevelDTO(DataItemLevelDTO dataItemLevelDTO)	{
		dataItemLevelName = dataItemLevelDTO.getDataItemLevelName();
		
		Iterator<DataItemInstanceDTO> dataItemInstanceDTOIterator = dataItemLevelDTO.getDataItemInstanceDTOs().iterator();
		while (dataItemInstanceDTOIterator.hasNext())	{
			DataItemInstanceDTO dataItemInstanceDTO = dataItemInstanceDTOIterator.next();
			DataItemInstance dataItemInstance = new DataItemInstance();
			dataItemInstance.setDataItemInstanceDTO(dataItemInstanceDTO);
			addDataItemInstance(dataItemInstance);
		}
	}
	public DataItemLevelDTO getDataItemLevelDTO()	{
		DataItemLevelDTO dataItemLevelDTO = new DataItemLevelDTO();
		dataItemLevelDTO.setDataItemLevelName(dataItemLevelName);
		
		List<DataItemInstanceDTO> dataItemInstanceDTOs = new ArrayList<DataItemInstanceDTO>();
		if (dataItemInstances!=null)	{
			Iterator<DataItemInstance> instanceIterator = dataItemInstances.iterator();
			while (instanceIterator.hasNext())	{
				DataItemInstance dataItemInstance = instanceIterator.next();
				DataItemInstanceDTO dataItemInstanceDTO = dataItemInstance.getDataItemInstanceDTO();
				dataItemInstanceDTOs.add(dataItemInstanceDTO);
			}
		}
		dataItemLevelDTO.setDataItemInstanceDTOs(dataItemInstanceDTOs);
		
		return dataItemLevelDTO;
	}
	
}
